#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

struct TrieNode {
    int next[2] = {-1, -1};      // 子节点索引，0 和 1
    int last_cnt[2] = {-1, -1};  // 记录该分支路径上的最大插入次数（cnt）
    int end_cnt = -1;            // 叶子节点记录的插入次数（cnt）
};

void solve() {
    int n, k;
    cin >> n >> k;
    vector<TrieNode> trie(1);  // 初始根节点
    vector<int> arr(n + 1);    // 存储输入数组（索引从 1 开始）
    int cnt = 0;               // 插入次数计数器

    // 插入函数：动态构建 Trie 并更新路径信息
    auto insert = [&](int x) {
        int p = 0;
        for (int i = 30; i >= 0; i--) {
            int u = (x >> i) & 1;
            if (trie[p].next[u] == -1) {
                trie[p].next[u] = trie.size();
                trie.emplace_back();
            }
            trie[p].last_cnt[u] = cnt;  // 更新该分支的最大 cnt
            p = trie[p].next[u];
        }
        trie[p].end_cnt = cnt;  // 记录叶子节点的插入次数
    };

    // 查询函数：找到满足异或 ≥k 的最大 cnt（对应最小左端点）
    auto search = [&](int x) {
        int max_cnt = -1;
        int p = 0;
        for (int i = 30; i >= 0; i--) {
            int b = (x >> i) & 1;
            int km = (k >> i) & 1;
            
            // 如果当前位允许异或结果更大，尝试另一分支
            if (km == 0 && trie[p].next[1 ^ b] != -1) {
                max_cnt = max(max_cnt, trie[p].last_cnt[1 ^ b]);
            }
            
            // 继续处理必须满足的路径
            int dir = b ^ km;
            if (trie[p].next[dir] == -1) break;
            p = trie[p].next[dir];
        }
        if (p != -1) max_cnt = max(max_cnt, trie[p].end_cnt);
        return max_cnt;
    };

    // 读取输入
    for (int i = 1; i <= n; i++) cin >> arr[i];
    if (k == 0) {
        cout << 1 << endl;
        return;
    }

    // 遍历数组，动态插入并查询
    int ans = 0x3f3f3f3f;
    for (int i = 1; i <= n; i++) {
        int left_cnt = search(arr[i]);
        if (left_cnt != -1) {
            ans = min(ans, i - (left_cnt + 1) + 1); // 转换为实际索引差
        }
        insert(arr[i]);
        cnt++;
    }
    cout << (ans <= n ? ans : -1) << endl;
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    int tt;
    cin >> tt;
    while (tt--) solve();
}